#!/bin/bash
set -e

echo "================================================="
echo "开始制作 oem.img..."
echo "================================================="

# --- 1. 设置路径和参数 ---
SDK_ROOT=$(dirname "$(realpath "$0")")
OEM_SRC_DIR="$SDK_ROOT/output/out/oem"
IMAGE_OUT_DIR="$SDK_ROOT/output/image"
MKFS_UBI_SCRIPT=$(find "$SDK_ROOT/mtd-utils" -name "mkfs_ubi.sh" | head -n 1)
MK_UPDATE_SCRIPT="$SDK_ROOT/tools/linux/Linux_Pack_Firmware/mk-update_pack.sh"

# 分区参数 - 只使用默认的 2KB_128KB 规格
PARTITION_NAME="oem"
PARTITION_SIZE_BYTES=62914560  # 60MB
FS_TYPE="ubifs"
FS_COMP="lzo"

# 设置环境变量，只生成默认规格
export UBI_PAGE_SIZE=2048
export UBI_BLOCK_SIZE=0x20000

echo "项目根目录: $SDK_ROOT"
echo "OEM 源目录: $OEM_SRC_DIR"
echo "镜像输出目录: $IMAGE_OUT_DIR"
echo "打包脚本: $MKFS_UBI_SCRIPT"
echo "更新包脚本: $MK_UPDATE_SCRIPT"
echo "页大小: ${UBI_PAGE_SIZE} 字节 (2KB)"
echo "块大小: ${UBI_BLOCK_SIZE} 字节 (128KB)"

# --- 2. 检查环境 ---
if [ ! -d "$OEM_SRC_DIR" ]; then
    echo "错误: OEM 源目录 '$OEM_SRC_DIR' 不存在。"
    exit 1
fi
if [ -z "$MKFS_UBI_SCRIPT" ] || [ ! -f "$MKFS_UBI_SCRIPT" ]; then
    echo "错误: 未能找到核心打包脚本 mkfs_ubi.sh"
    exit 1
fi

mkdir -p "$IMAGE_OUT_DIR"

# --- 3. 执行打包 ---
echo "正在调用核心脚本制作镜像..."

# 调用 mkfs_ubi.sh，传递所有必要参数
"$MKFS_UBI_SCRIPT" "$OEM_SRC_DIR" "$IMAGE_OUT_DIR" "$PARTITION_SIZE_BYTES" "$PARTITION_NAME" "$FS_TYPE" "$FS_COMP"

# --- 4. 处理生成的文件 ---
echo "处理生成的文件..."

# 预期的文件名
EXPECTED_UBI_FILE="$IMAGE_OUT_DIR/${PARTITION_NAME}_2KB_128KB_60MB.ubi"

if [ -f "$EXPECTED_UBI_FILE" ]; then
    # 直接重命名为 oem.img，而不是创建符号链接
    mv "$EXPECTED_UBI_FILE" "$IMAGE_OUT_DIR/${PARTITION_NAME}.img"
    echo "成功! 已将 $EXPECTED_UBI_FILE 重命名为 oem.img"
else
    echo "警告: 未找到预期的 .ubi 文件: $EXPECTED_UBI_FILE"
    echo "检查生成的文件:"
    ls -la "$IMAGE_OUT_DIR"/*.ubi 2>/dev/null || echo "没有找到 .ubi 文件"
fi

# 清理其他可能生成的 .ubi 文件
echo "清理其他 .ubi 文件..."
find "$IMAGE_OUT_DIR" -name "*.ubi" -delete 2>/dev/null || true

echo "================================================="
if [ -f "$IMAGE_OUT_DIR/${PARTITION_NAME}.img" ]; then
    echo "成功! oem.img 已在以下路径生成:"
    echo "$IMAGE_OUT_DIR/${PARTITION_NAME}.img"
    echo ""
    echo "文件信息:"
    ls -lh "$IMAGE_OUT_DIR/${PARTITION_NAME}.img"
    echo ""
    echo "MD5 校验和:"
    md5sum "$IMAGE_OUT_DIR/${PARTITION_NAME}.img"
else
    echo "错误: 镜像制作失败，未找到 oem.img。"
fi
echo "================================================="

# --- 5. 合成 update.img ---
echo "================================================="
echo "开始合成 update.img..."
echo "================================================="

# 检查更新包脚本是否存在
if [ ! -f "$MK_UPDATE_SCRIPT" ]; then
    echo "错误: 更新包脚本 '$MK_UPDATE_SCRIPT' 不存在。"
    echo "请确保 tools/linux/Linux_Pack_Firmware/mk-update_pack.sh 文件存在。"
    exit 1
fi

# 检查脚本是否可执行
if [ ! -x "$MK_UPDATE_SCRIPT" ]; then
    echo "设置更新包脚本执行权限..."
    chmod +x "$MK_UPDATE_SCRIPT"
fi

echo "正在调用更新包脚本合成 update.img..."
echo "命令: $MK_UPDATE_SCRIPT -id RV1106 -i $IMAGE_OUT_DIR"

# 切换到项目根目录执行命令
cd "$SDK_ROOT"
"$MK_UPDATE_SCRIPT" -id RV1106 -i "$IMAGE_OUT_DIR"

# --- 6. 验证 update.img 生成结果 ---
echo "================================================="
UPDATE_IMG_PATH="$IMAGE_OUT_DIR/update.img"

if [ -f "$UPDATE_IMG_PATH" ]; then
    echo "成功! update.img 已在以下路径生成:"
    echo "$UPDATE_IMG_PATH"
    echo ""
    echo "文件信息:"
    ls -lh "$UPDATE_IMG_PATH"
    echo ""
    echo "MD5 校验和:"
    md5sum "$UPDATE_IMG_PATH"
    echo ""
    echo "镜像目录内容:"
    ls -lh "$IMAGE_OUT_DIR"
else
    echo "警告: 未找到生成的 update.img 文件。"
    echo "检查镜像目录内容:"
    ls -la "$IMAGE_OUT_DIR"
fi
echo "================================================="